/*
 * > /*
>  * INSANE - Interactive Structural Analysis Environment
>  *
>  * Copyright (C) 2003-2004
>  * Universidade Federal de Minas Gerais
>  * Escola de Engenharia
>  * Departamento de Engenharia de Estruturas
>  *
>  * Author's email :     insane@dees.ufmg.br
>  * Author's Website :   http://www.dees.ufmg.br/insane
>  *
>  * This program is free software; you can redistribute it and/or
>  * modify it under the terms of the GNU General Public License
>  * as published by the Free Software Foundation; either version 2
>  * of the License, or any later version.
>  *
>  * This program is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>  * GNU General Public License for more details.
>  *
>  * You should have received a copy of the GNU General Public License
>  * along with this program; if not, write to the Free Software
>  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-
> 1307, USA.
 *
 */

package br.ufmg.dees.insane.xyplot.xyplot_view.command;

import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JInternalFrame;

import br.ufmg.dees.insane.commons.command.Command;
import br.ufmg.dees.insane.xyplot.xyplot_view.InterfaceXYPlot;

/**
 * The SetZoom command.
 * @author  Fonseca, Flavio & Pitangueira, Roque
 * @since  February 2004
 */
public class SetZoomCommand implements Command {
    
    private InterfaceXYPlot parent;
    private int click = 0;
    private Point2D po;
    
//*****************************************************************************
	
    /** Constructor method. */
    public SetZoomCommand(JInternalFrame parent) {
        this.parent = (InterfaceXYPlot)parent;
    }
    
//*****************************************************************************
	
	/** Execute method. */
    public void execute() {
        
        Point2D point = parent.getView().getDrawingArea().getWorldPoint();
        
        click ++;
        
        if (click % 2 != 0){
            po = point;
            PreviewZoomCommand pz = new PreviewZoomCommand(parent);
            pz.setInitialPoint(parent.getView().getDrawingArea().getViewPoint());
            parent.getView().getDrawingArea().setMovedCommand(pz);
            parent.getView().getDrawingArea().setRepainting(true);
        }else{
        	parent.getView().getDrawingArea().setZoom(new Rectangle2D.Double(Math.min(po.getX(), point.getX()),
				Math.min(po.getY(), point.getY()),
				Math.max(po.getX(), point.getX()),
				Math.max(po.getY(), point.getY())
				));            
			parent.getView().getController().compose();
			parent.getView().getDrawingArea().removeAllCommands();
			parent.getView().getDrawingArea().setClickedCommand(null);
			parent.getView().getDrawingArea().setRightClickedCommand(new SelectCommand(parent));
			parent.getView().getDrawingArea().setCursor();
			
			parent.getView().getDrawingArea().setMovedCommand(null);
			parent.getView().getDrawingArea().setRepainting(false);
			parent.getView().getDrawingArea().setShape(null);
			parent.getView().getDrawingArea().repaint();
			
        }
    }
    
//*****************************************************************************
	
    /**
     * Impossible to undo - not implemented.
     */
    public void undo() {}
    
//*****************************************************************************
	
    /**
     * Impossible to redo - not implemented.
     */
    public void redo() {}
	
//*****************************************************************************
}
